package com.yatuhashi.base.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ZipUtil {
    /**
     * ZIPファイルを解凍する
     * @param targetDir 解凍するファイルのパス
     * @param createDir 生成するファイルの親ディレクトリ
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static void unzip(String targetDir, String createDir) 
            throws FileNotFoundException, IOException {
        int bufferSize = 4096; // 4kb
        String entryName;
        BufferedOutputStream bos = null; // バッファー出力
        
        FileInputStream fis = new FileInputStream(targetDir);
        ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
        
        ZipEntry zipEntry; //
        while((zipEntry = zis.getNextEntry())!=null) {
            int count;
            byte data[] = new byte[bufferSize];
            
            // ファイル名
            entryName = zipEntry.getName();
            
            File entryFile = new File(createDir+entryName);
            
            // 親フォルダーがない場合、新規生成
            File entryDir = new File(entryFile.getParent());
            if(!entryDir.exists()) {
                entryDir.mkdirs();
            }
            
            FileOutputStream fos = new FileOutputStream(entryFile);
            
            bos = new BufferedOutputStream(fos, bufferSize);
            while((count=zis.read(data, 0, bufferSize))!=-1) {
                bos.write(data, 0, count);
            }
            
            bos.flush();
            bos.close();
        }
        zis.close();
    }
}
